New upstream version 1.1.4+ds1
authorBoyuan Yang <byang@debian.org>
Sat, 4 Jun 2022 15:39:42 +0000 (11:39 -0400)
committerBoyuan Yang <byang@debian.org>
Sat, 4 Jun 2022 15:39:42 +0000 (11:39 -0400)
33 files changed:
.appveyor.yml
.github/workflows/nodejs.yml
.github/workflows/python.yml
.github/workflows/release-pypi.yml
.travis.yml
CMakeLists.txt
NEWS.md
README.md
data/dictionary/JPShinjitaiCharacters.txt
data/dictionary/JPVariants.txt
data/dictionary/STCharacters.txt
data/dictionary/STPhrases.txt
data/dictionary/TSCharacters.txt
data/dictionary/TSPhrases.txt
data/dictionary/TWPhrasesIT.txt
data/dictionary/TWPhrasesOther.txt
data/scheme/ts_multi.txt
package.json
release-pypi-linux.sh
release-pypi-macos.sh
release-pypi-windows.cmd
setup.py
src/DictConverter.cpp
src/DictConverter.hpp
src/Lexicon.cpp
src/Lexicon.hpp
src/TextDict.cpp
src/TextDictTest.cpp
src/UTF8Util.hpp
test/testcases/s2t.ans
test/testcases/s2t.in
test/testcases/t2s.ans
test/testcases/t2s.in

index 06278bfc2e0b5e5d824252ed4d04d7cda30de38c..bde79a005e6e54978f581ceeb5c8af9ede2868a8 100644 (file)
@@ -12,7 +12,6 @@ environment:
     - nodejs_version: 16
     - nodejs_version: 14
     - nodejs_version: 12
-    - nodejs_version: 10
 
     # Build plain C++
     - nodejs_version: none
index a9e30339cd8bb7f48a229a19bbbe5b8198f9ba55..4f4344e161b07d383a0ee184be03ffea03cfe46a 100644 (file)
@@ -13,7 +13,7 @@ jobs:
 
     strategy:
       matrix:
-        node-version: [10.x, 12.x, 14.x, 16.x]
+        node-version: [12.x, 14.x, 16.x]
 
     steps:
     - uses: actions/checkout@v2
index 51b393b771b0a0ebb2df1e0acb21d7b253a3dd6a..e7f6ee7d08dd083e0710ef0b8d1befe01752a7c1 100644 (file)
@@ -12,7 +12,7 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python-version: [3.5, 3.6, 3.7, 3.8, 3.9]
+        python-version: [3.7, 3.8, 3.9, '3.10']
 
     steps:
     - uses: actions/checkout@v2
index 27e0b278444592dcb71afd83f9524a4d2b53b930..c9f6e91b3174a1cc38058202367bc4c1ea2a349f 100644 (file)
@@ -19,7 +19,7 @@ jobs:
         docker run --rm -v "${PWD}:/opt/OpenCC" \
           -e TWINE_USERNAME=__token__ \
           -e TWINE_PASSWORD=${{ secrets.PYPI_TOKEN }} \
-          ubuntu:16.04 /bin/bash /opt/OpenCC/release-pypi-linux.sh
+          ubuntu:18.04 /bin/bash /opt/OpenCC/release-pypi-linux.sh
 
     - name: Build package and upload (macOS)
       if: runner.os == 'macOS'
index c9728ef6815e944aeb97929a529706adeccbb5be..2e7269cba637fdda6046a08b09916a3d70dd113b 100644 (file)
@@ -9,7 +9,6 @@ node_js:
   - 16
   - 14
   - 12
-  - 10
 
 os:
   - linux
index 07e374591f89863e14bfbdaa67c8cc36e81486c7..d2ae9877384766386a844f20502848e8c006bdb6 100644 (file)
@@ -42,7 +42,7 @@ set (PACKAGE_URL https://github.com/BYVoid/Opencc)
 set (PACKAGE_BUGREPORT https://github.com/BYVoid/Opencc/issues)
 set (OPENCC_VERSION_MAJOR 1)
 set (OPENCC_VERSION_MINOR 1)
-set (OPENCC_VERSION_REVISION 3)
+set (OPENCC_VERSION_REVISION 4)
 
 if (CMAKE_BUILD_TYPE MATCHES Debug)
   set (version_suffix .Debug)
diff --git a/NEWS.md b/NEWS.md
index 44c544fb0db077c3136cf679f9aaaba25b8a5569..1056b7937284e81b0899ecb11a490cbe8d5e990f 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,5 +1,13 @@
 # Change History of OpenCC
 
+## Version 1.1.4
+
+2022年6月4日
+
+* 支持Python 3.10([#637](https://github.com/BYVoid/OpenCC/issues/637)。
+* 移除针对Python 2.7、3.5、3.6和Node 10的构建([#690](https://github.com/BYVoid/OpenCC/issues/690), [#691](https://github.com/BYVoid/OpenCC/issues/691))。
+* 若干其他小修復。
+
 ## Version 1.1.3
 
 2021年9月3日
index 4af8d3771ed9c701d7ae760262573b073926f24e..7225e0142966fa08ddced11eac8245fc80a46dfe 100644 (file)
--- a/README.md
+++ b/README.md
@@ -110,12 +110,14 @@ Document 文檔: https://byvoid.github.io/OpenCC/
 ### Others (Unofficial)
 
 * Swift (iOS): [SwiftyOpenCC](https://github.com/XQS6LB3A/SwiftyOpenCC)
+* iOSOpenCC (pod): [iOSOpenCC](https://github.com/swiftdo/OpenCC)
 * Java: [opencc4j](https://github.com/houbb/opencc4j)
 * Android: [android-opencc](https://github.com/qichuan/android-opencc)
 * PHP: [opencc4php](https://github.com/nauxliu/opencc4php)
 * Pure JavaScript: [opencc-js](https://github.com/nk2028/opencc-js)
 * WebAssembly: [wasm-opencc](https://github.com/oyyd/wasm-opencc)
 * Browser Extension: [opencc-extension](https://github.com/tnychn/opencc-extension)
+* Go (Pure): [OpenCC for Go](https://github.com/longbridgeapp/opencc)
 
 ### Configurations 配置文件
 
@@ -274,7 +276,8 @@ All these libraries are statically linked by default.
 * [Cychih](https://github.com/pi314)
 * [kyleskimo](https://github.com/kyleskimo)
 * [Ryuan Choi](https://github.com/bunhere)
+* [Prcuvu](https://github.com/Prcuvu)
 * [Tony Able](https://github.com/TonyAble)
 * [Xiao Liang](https://github.com/yxliang01)
 
-Please update this list you have contributed OpenCC.
+Please feel free to update this list if you have contributed OpenCC.
index 4dd885faec9c11a6997196c5bf687c3a721a36c6..2b19e66f7ad8d9da310f88a93c1ca37cf696b1fc 100644 (file)
@@ -4,3 +4,4 @@
 欠    缺 欠
 糸    絲 糸
 芸    藝 芸
+浜    濱 浜
index 6ed3b9272826b9f06f5773052785a66ae5c79583..3a8468b0bc64abb2b2682e2cc4464782a1245d7a 100644 (file)
 淨    浄
 淺    浅
 渴    渇
º\8c    æ½\91
½\91    æº\8c
 溪    渓
 溫    温
 溼    湿
 穗    穂
 穩    穏
 穰    穣
-ç«\83    ç«\88
+ç«\88    ç«\83
 竊    窃
 粹    粋
 糉    粽
 縣    県
 縱    縦
 總    総
-ç¹\8b    ç¹«
+繫    ç¹\8b
 繡    繍
 繩    縄
 繪    絵
 鄉    郷
 酢    醋
 醉    酔
\86\97    é\86±
\86±    é\86\97
 醫    医
 醬    醤
 釀    醸
index 912d1625c07605e48f235a4aaa5c7d0ae182e332..89edbc96f1798ba45484ef0ea87455d55d92ae95 100644 (file)
 坚    堅
 坛    壇 罈
 坜    壢
-坝    壩
+坝    壩 垻
 坞    塢
 坟    墳
 坠    墜
 汉    漢
 汤    湯
 汹    洶
+沄    澐
 沈    沈 瀋
 沟    溝
 没    沒
 𫢸   僤
 𫧃   𣍐
 𫧮   𪋿
+𫫇   噁
 𫬐   㘔
+𫭟   塸
+𫭢   埨
+𫭼   𡑍
 𫮃   墠
 𫰛   娙
+𫵷   㠣
 𫶇   嵽
 𫷷   廞
 𫸩   彄
 𬀩   暐
+𬀪   晛
+𬂩   梜
+𬃊   櫍
+𬇕   澫
+𬇙   浿
+𬇹   漍
+𬉼   熰
+𬊈   燖
+𬊤   燀
+𬍛   瓅
+𬍡   璗
+𬍤   璕
+𬒈   礐
+𬒗   𥗽
+𬕂   篢
+𬘓   紃
+𬘘   紞
+𬘡   絪
+𬘩   綎
+𬘫   綄
+𬘬   綪
+𬘭   綝
+𬘯   綧
+𬙂   縯
+𬙊   纆
+𬙋   纕
+𬜬   蔄
+𬜯   䓣
+𬞟   蘋
+𬟁   虉
+𬟽   蝀
+𬣙   訏
+𬣞   詝
+𬣡   諓
+𬣳   詪
+𬤇   諲
+𬤊   諟
+𬤝   譓
+𬨂   軝
+𬨎   輶
+𬩽   鄩
+𬪩   醲
+𬬩   釴
 𬬭   錀
+𬬮   鋹
+𬬱   釿
+𬬸   鉥
+𬬹   鉮
 𬬻   鑪
+𬬿   鉊
+𬭁   鉧
 𬭊   𨧀
+𬭎   鋐
+𬭚   錞
 𬭛   𨨏
+𬭤   鍭
+𬭩   鎓
+𬭬   鏏
 𬭭   鏚
+𬭯   䥕
 𬭳   𨭎
 𬭶   𨭆
+𬭸   鏻
+𬭼   鐩
+𬮱   闉
+𬮿   隑
+𬯀   隮
+𬯎   隤
+𬱖   頔
+𬱟   頠
+𬳵   駓
+𬳶   駉
+𬳽   駪
+𬳿   駼
+𬴂   騑
+𬴃   騞
+𬴊   驎
 𬶋   鮈
 𬶍   鮀
 𬶏   鮠
+𬶐   鮡
 𬶟   鯻
+𬶠   鰊
+𬶨   鱀
+𬶭   鰶
+𬶮   鱚
+𬷕   鵏
+𬸘   鶠
+𬸚   鸑
+𬸣   鶱
+𬸦   鷟
 𬸪   鷭
 𬸯   鷿
+𬹼   齘
+𬺈   齮
+𬺓   齼
 𰬸   繐
 𰰨   菕
 𰶎   譅
index 5a57bdc0a92376c173341ec5f3922ba69a743ebf..5798c78c69e1e49433635ce8f27be68d77f99e64 100644 (file)
 七余 七餘
 七八下里   七八下裏
 七出 七出
+七出戏      七齣戲
 七出祁山   七出祁山
 七分钟      七分鐘
 七划 七劃
 三冬 三冬
 三冬两夏   三冬兩夏
 三准 三準
+三出戏      三齣戲
 三出祁山   三出祁山
 三分钟      三分鐘
 三只 三隻
 不可胜言   不可勝言
 不可胜计   不可勝計
 不可胜记   不可勝記
-ä¸\8då\90\83ç\83\9fç\81«é£\9f        ä¸\8då\90\83煙火食
+ä¸\8då\90\83ç\83\9fç\81«é£\9f        ä¸\8då\96«煙火食
 不合 不合
 不合体统   不合體統
 不合作      不合作
 不差毫发   不差毫髮
 不干 不幹 不乾
 不干不净   不乾不淨
-ä¸\8då¹²ä¸\8dæ·¨å\90\83äº\86没ç\97\85       ä¸\8dä¹¾ä¸\8dæ·¨å\90\83了沒病
+ä¸\8då¹²ä¸\8dæ·¨å\90\83äº\86没ç\97\85       ä¸\8dä¹¾ä¸\8dæ·¨å\96«了沒病
 不干了      不幹了
 不干事      不幹事
 不干他      不干他
 乌滋别克   烏滋別克
 乌滋别克斯坦     烏滋別克斯坦
 乌烟瘴气   烏煙瘴氣
-ä¹\8cç\8b\97å\90\83é£\9fç\99½ç\8b\97å½\93ç\81¾       ç\83\8fç\8b\97å\90\83食白狗當災
+ä¹\8cç\8b\97å\90\83é£\9fç\99½ç\8b\97å½\93ç\81¾       ç\83\8fç\8b\97å\96«食白狗當災
 乌苏 烏蘇
 乌苏市      烏蘇市
 乌苏拉      烏蘇拉
 九亿五千万        九億五千萬
 九余 九餘
 九冬 九冬
+九出戏      九齣戲
 九出祁山   九出祁山
 九分钟      九分鐘
 九划 九劃
 似松实紧   似鬆實緊
 佃租制度   佃租制度
 但云 但云
-ä½\86å¾\97ä¸\80ç\89\87æ©\98ç\9a®å\90\83ä¸\94è\8e«å¿\98äº\86æ´\9e庭æ¹\96     ä½\86å¾\97ä¸\80ç\89\87æ©\98ç\9a®å\90\83且莫忘了洞庭湖
+ä½\86å¾\97ä¸\80ç\89\87æ©\98ç\9a®å\90\83ä¸\94è\8e«å¿\98äº\86æ´\9e庭æ¹\96     ä½\86å¾\97ä¸\80ç\89\87æ©\98ç\9a®å\96«且莫忘了洞庭湖
 但愿 但願
 但愿如此   但願如此
 但曲 但曲
 侵蚀基准   侵蝕基準
 便了 便了
 便于 便於
-便å\90\83å¹²      ä¾¿å\90\83
+便å\90\83å¹²      ä¾¿å\96«
 便宜不过当家     便宜不過當家
 便当 便當
 便当店      便當店
 党外 黨外
 党外人士   黨外人士
 党太尉      党太尉
\85\9a太å°\89å\90\83å\8c¾é£\9f     å\85\9a太å°\89å\90\83匾食
\85\9a太å°\89å\90\83å\8c¾é£\9f     å\85\9a太å°\89å\96«匾食
 党委 黨委
 党委书记   黨委書記
 党委会      黨委會
 全面禁止核试验条约    全面禁止核試驗條約
 全面规划   全面規劃
 全面进行   全面進行
+兩出戏      兩齣戲
 八万 八萬
 八万一千   八萬一千
 八万四千法门     八萬四千法門
 八余 八餘
 八克 八克
 八军团      八軍團
+八出戏      八齣戲
 八出祁山   八出祁山
 八十天环游地球  八十天環遊地球
 八十种好   八十種好
 六余 六餘
 六冲 六沖
 六出奇计   六出奇計
+六出戏      六齣戲
 六出祁山   六出祁山
 六厂 六廠
 六发 六發
 出宰 出宰
 出家 出家
 出家人      出家人
\87ºå®¶äººå\90\83å\85«æ\96¹     å\87ºå®¶äººå\90\83八方
\87ºå®¶äººå\90\83å\85«æ\96¹     å\87ºå®¶äººå\96«八方
 出将入相   出將入相
 出小恭      出小恭
 出尔反尔   出爾反爾
 出恭 出恭
 出息 出息
 出意外      出意外
-出戏 齣戲
+出戏 出戏 齣戲
 出战 出戰
 出户 出戶
 出手 出手
 切当 切當
 切菜板      切菜板
 切除术      切除術
-切面 切面
+切面 切面 切麵
 切骨之仇   切骨之仇
 刊了 刊了
 刊出 刊出
 口出恶言   口出惡言
 口出秽言   口出穢言
 口占 口占
+口吃 口吃
 口布 口布
 口干 口乾
 口干舌燥   口乾舌燥
 只可在      只可在
 只可意会不可言传       只可意會不可言傳
 只叹 只嘆
\8fªå\90\83 å\8fªå\90\83
\8fªå\90\83 å\8fªå\96«
 只合 只合
 只含 只含
 只听 只聽
 吁气 吁氣
 吁求 籲求
 吁请 籲請
-吃一顿挨一顿     吃一頓挨一頓
-吃不了      吃不了
-吃不出      吃不出
-吃不出来   吃不出來
-吃了 吃了
-吃了定心丸        吃了定心丸
-吃了秤砣   吃了秤砣
-吃了蜜蜂儿屎似的       吃了蜜蜂兒屎似的
-吃了饭      吃了飯
-吃亏上当   吃虧上當
-吃亏就是占便宜  吃虧就是佔便宜
-吃人一个蛋恩情无法断 吃人一個蛋恩情無法斷
-吃人虫      吃人蟲
-吃伤了      吃傷了
-吃几碗干饭        吃幾碗乾飯
-吃出 吃出
-吃合家欢   吃合家歡
-吃后悔药   吃後悔藥
-吃回头草   吃回頭草
-吃地面      吃地面
-吃姜 吃薑
-吃完面      吃完麪
-吃尽 吃盡
-吃尽当光   吃盡當光
-吃干了      吃乾了
-吃干醋      吃乾醋
-吃得了      吃得了
-吃得出      吃得出
-吃得出来   吃得出來
-吃挂络儿   吃掛絡兒
-吃敲才      吃敲才
-吃板刀面   吃板刀麪
-吃枪药      吃槍藥
-吃烟 吃煙
-吃药 吃藥
-吃药前      吃藥前
-吃药后      吃藥後
-吃药时      吃藥時
-吃豆干      吃豆乾
-吃辣面      吃辣麪
-吃过面      吃過麪
-吃里扒外   吃裏扒外
-吃里爬外   吃裏爬外
-吃钉板      吃釘板
-吃错药      吃錯藥
-吃闲话      吃閒話
-吃闲饭      吃閒飯
-吃面 吃麪
-吃饭傢伙   吃飯傢伙
-吃饭别忘了种谷人       吃飯別忘了種穀人
-吃饭家伙   吃飯家伙
-吃饱了饭撑的     吃飽了飯撐的
-吃饱没事干        吃飽沒事幹
+吃一顿挨一顿     喫一頓挨一頓
+吃不了      喫不了
+吃不出      喫不出
+吃不出来   喫不出來
+吃了 喫了
+吃了定心丸        喫了定心丸
+吃了秤砣   喫了秤砣
+吃了蜜蜂儿屎似的       喫了蜜蜂兒屎似的
+吃了饭      喫了飯
+吃亏上当   喫虧上當
+吃亏就是占便宜  喫虧就是佔便宜
+吃亏的是乖占便宜的是呆      喫虧的是乖占便宜的是呆
+吃人一个蛋恩情无法断 喫人一個蛋恩情無法斷
+吃人虫      喫人蟲
+吃伤了      喫傷了
+吃几碗干饭        喫幾碗乾飯
+吃出 喫出
+吃合家欢   喫合家歡
+吃后悔药   喫後悔藥
+吃回头草   喫回頭草
+吃地面      喫地面
+吃姜 喫薑
+吃完面      喫完麪
+吃尽 喫盡
+吃尽当光   喫盡當光
+吃干了      喫乾了
+吃干醋      喫乾醋
+吃得了      喫得了
+吃得出      喫得出
+吃得出来   喫得出來
+吃挂络儿   喫掛絡兒
+吃敲才      喫敲才
+吃板刀面   喫板刀麪
+吃枪药      喫槍藥
+吃烟 喫煙
+吃药 喫藥
+吃药前      喫藥前
+吃药后      喫藥後
+吃药时      喫藥時
+吃豆干      喫豆乾
+吃辣面      喫辣麪
+吃过面      喫過麪
+吃里扒外   喫裏扒外
+吃里爬外   喫裏爬外
+吃钉板      喫釘板
+吃错药      喫錯藥
+吃闲话      喫閒話
+吃闲饭      喫閒飯
+吃面 喫麪
+吃饭傢伙   喫飯傢伙
+吃饭别忘了种谷人       喫飯別忘了種穀人
+吃饭家伙   喫飯家伙
+吃饱了饭撑的     喫飽了飯撐的
+吃饱没事干        喫飽沒事幹
 各不相同   各不相同
 各个 各個
 各个击破   各個擊破
 合口味      合口味
 合口呼      合口呼
 合叶 合葉
\90\88å\90\83 å\90\88å\90\83
\90\88å\90\83æ\97\8f      å\90\88å\90\83
\90\88å\90\83 å\90\88å\96«
\90\88å\90\83æ\97\8f      å\90\88å\96«
 合合 合合
 合同 合同
 合同各方   合同各方
 同参 同參
 同右 同右
 同号 同號
\90\8cå\90\83 å\90\8cå\90\83
\90\8cå\90\83å\90\8cä½\8f   å\90\8cå\90\83同住
\90\8cå\90\83 å\90\8cå\96«
\90\8cå\90\83å\90\8cä½\8f   å\90\8cå\96«同住
 同名 同名
 同名之累   同名之累
 同名同姓   同名同姓
 喧哄 喧鬨
 喧哗 喧譁
 喧噪 喧噪
-喫亏的是乖占便宜的是呆      喫虧的是乖占便宜的是呆
 喷云吐雾   噴雲吐霧
 喷云嗳雾   噴雲噯霧
 喷出 噴出
 复习考      複習考
 复书 復書
 复交 復交
-复亩珍      複畝珍
 复仇 復仇
 复仇者      復仇者
 复仇记      復仇記
 多发病      多發病
 多只 多隻
 多台 多臺
-å¤\9aå\90\83å¤\9aå\8d    å¤\9aå\90\83多佔
+å¤\9aå\90\83å¤\9aå\8d    å¤\9aå\96«多佔
 多向 多向
 多哈回合   多哈回合
 多回 多回
 大获 大獲
 大获全胜   大獲全勝
 大虫 大蟲
-大è\99«ä¸\8då\90\83ä¼\8fè\82\89     å¤§è\9f²ä¸\8då\90\83伏肉
+大è\99«ä¸\8då\90\83ä¼\8fè\82\89     å¤§è\9f²ä¸\8då\96«伏肉
 大虫口里倒涎     大蟲口裏倒涎
-大è\99«å\90\83å°\8fè\99«        å¤§è\9f²å\90\83小蟲
+大è\99«å\90\83å°\8fè\99«        å¤§è\9f²å\96«小蟲
 大虫头上做窠     大蟲頭上做窠
 大蜡 大蜡
 大衍历      大衍曆
 就出 就出
 就出去      就出去
 就出来      就出來
-å°±å\90\83å¹²      å°±å\90\83
+å°±å\90\83å¹²      å°±å\96«
 就回 就回
 就回去      就回去
 就回来      就回來
 布气 布氣
 布水 布水
 布法罗      布法羅
-布洒器      布灑器
 布洛克      布洛克
 布洛斯顿   布洛斯頓
 布洛沙德   布洛沙德
 布瑞斯特   布瑞斯特
 布瑞特      布瑞特
 布瑞顿      布瑞頓
-布用填      布用填
 布疋 布疋
 布疑阵      佈疑陣
 布痕瓦尔德        布痕瓦爾德
 平复帖      平復帖
 平复起来   平復起來
 平头并进   平頭並進
-平安里      平安
+平安里      平安
 平定准噶尔回部得胜图 平定準噶爾回部得勝圖
 平平当当   平平當當
 平康里      平康里
 弄盏传杯   弄盞傳杯
 弄粉调朱   弄粉調朱
 弄脏 弄髒
-å¼\84é\9d¢å\90\83      å¼\84麪å\90\83
+å¼\84é\9d¢å\90\83      å¼\84麪å\96«
 弄鬼吊猴   弄鬼弔猴
 弈秋 弈秋
 弊帚千金   弊帚千金
 快出来      快出來
 快升 快升
 快去快回   快去快回
-å¿«å\90\83å¹²      å¿«å\90\83
+å¿«å\90\83å¹²      å¿«å\96«
 快向 快向
 快回 快回
 快回到      快回到
 手铲 手鏟
 手链 手鍊 手鏈
 手面 手面
\89\8bé\9d¢èµ\9aå\90\83   æ\89\8bé\9d¢è³ºå\90\83
\89\8bé\9d¢èµ\9aå\90\83   æ\89\8bé\9d¢è³ºå\96«
 才上到      纔上到
 才上去      纔上去
 才上来      纔上來
 早知今日悔不当初       早知今日悔不當初
 早秋 早秋
 早自修      早自修
\97©èµ·ç\9a\84é¸\9få\84¿æ\9c\89è\99«å\90\83       æ\97©èµ·ç\9a\84é³¥å\85\92æ\9c\89è\9f²å\90\83
\97©èµ·ç\9a\84é¸\9få\84¿æ\9c\89è\99«å\90\83       æ\97©èµ·ç\9a\84é³¥å\85\92æ\9c\89è\9f²å\96«
 旭日东升   旭日東昇
 旭日初升   旭日初昇
 旱干 旱乾
 暗号 暗號
 暗号灯      暗號燈
 暗叹 暗歎
\9a\97å\90\83ä¸\80æ\83\8a   æ\9a\97å\90\83一驚
\9a\97å\90\83ä¸\80æ\83\8a   æ\9a\97å\96«一驚
 暗合 暗合
 暗含 暗含
 暗喜 暗喜
 武器系统   武器系統
 武器级别材料     武器級別材料
 武坛 武壇
-武大é\83\8eå\90\83æ¯\92è\8d¯     æ­¦å¤§é\83\8eå\90\83毒藥
+武大é\83\8eå\90\83æ¯\92è\8d¯     æ­¦å¤§é\83\8eå\96«毒藥
 武当 武當
 武当山      武當山
 武当派      武當派
 猝发 猝發
 猢狲入布袋        猢猻入布袋
 猥当大任   猥當大任
\8cªå\85«æ\88\92å\90\83人å\8f\82æ\9e\9c  è±¬å\85«æ\88\92å\90\83人參果
\8cªå\85«æ\88\92å\90\83人å\8f\82æ\9e\9c  è±¬å\85«æ\88\92å\96«人參果
 猪只 豬隻
 猪肉干      豬肉乾
 猪肝面      豬肝麪
 相须为命   相須爲命
 相须而行   相須而行
 盼了 盼了
-盼既示复   盼既示覆
 盾板 盾板
 省个 省個
 省了 省了
 稔恶不悛   稔惡不悛
 稠云 稠雲
 稳占 穩佔
-稳å\90\83ä¸\89注   ç©©å\90\83三注
+稳å\90\83ä¸\89注   ç©©å\96«三注
 稳坐钓鱼台        穩坐釣魚臺
 稳定物价   穩定物價
 稳当 穩當
 算出去      算出去
 算出来      算出來
 算历 算曆
-算发 算髮
 算得了      算得了
 算术 算術
 算术和      算術和
 肿瘤切除术        腫瘤切除術
 胁制 脅制
 胃出血      胃出血
+胃口 胃口
 胃脏 胃臟
 胃药 胃藥
 胃药片      胃藥片
 胡厮哄      胡廝哄
 胡厮混      胡廝混
 胡厮缠      胡廝纏
\83¡å\90\83æµ·å\96\9d   è\83¡å\90\83海喝
\83¡å\90\83é\97·ç\9d¡   è\83¡å\90\83悶睡
\83¡å\90\83æµ·å\96\9d   è\83¡å\96«海喝
\83¡å\90\83é\97·ç\9d¡   è\83¡å\96«悶睡
 胡同 衚衕
 胡吣 胡唚
 胡吹 胡吹
 虫儿 蟲兒
 虫出 蟲出
 虫卵 蟲卵
\99«å\90\83ç\89\99      è\9f²å\90\83
\99«å\90\83ç\89\99      è\9f²å\96«
 虫声 蟲聲
 虫媒病毒   蟲媒病毒
 虫媒花      蟲媒花
 角膜移植术        角膜移植術
 角色冲突   角色衝突
 角色扮演游戏     角色扮演遊戲
-角落发      角落發
+角落 角落
 角落里      角落裏
 角谷猜想   角谷猜想
 角里 角里
 邢台市      邢臺市
 那个 那個
 那个人      那個人
\82£ä¸ªç\8c«å\84¿ä¸\8då\90\83è\85¥  é\82£å\80\8bè²\93å\85\92ä¸\8då\90\83
\82£ä¸ªç\8c«å\84¿ä¸\8då\90\83è\85¥  é\82£å\80\8bè²\93å\85\92ä¸\8då\96«
 那个耗子不偷油  那個耗子不偷油
 那么 那麼
 那么干      那麼幹
 部发 部發
 部曲 部曲
 部胡林      部胡林
-部落发      部落發
+部落 部落
 部落同盟   部落同盟
 郭勇志      郭勇志
 郭台成      郭臺成
index 5dc2b2b1855efe22eb7360da119ab7a564aea8a7..a236514576eed080868c64b4899c46315063ce02 100644 (file)
@@ -23,6 +23,7 @@
 㞞    𪨊
 㟺    𪩇
 㠏    㟆
+㠣    𫵷
 㢗    𪪑
 㢝    𢋈
 㥮    㤘
@@ -88,6 +89,7 @@
 䍽    𦍠
 䎙    𫅭
 䎱    䎬
+䓣    𬜯
 䕤    𫟕
 䕳    𦰴
 䖅    𫟑
 䥄    𫠀
 䥇    䦂
 䥑    鿏
+䥕    𬭯
 䥗    𫔋
 䥩    𨱖
 䥯    𫔆
 僑    侨
 僕    仆
 僞    伪
+僤    𫢸
 僥    侥
 僨    偾
 僱    雇
 刪    删
 剄    刭
 則    则
-剋    克
+剋    克 剋
 剎    刹
 剗    刬
 剛    刚
 嘸    呒
 嘺    𪡀
 嘽    啴
-噁    恶
+噁    恶 𫫇
 噅    𠯠
 噓    嘘
 噚    㖊
 圖    图
 團    团
 圞    𪢮
+垻    坝
 埡    垭
+埨    𫭢
 埬    𪣆
 埰    采
 執    执
 塢    坞
 塤    埙
 塵    尘
+塸    𫭟
 塹    堑
 塿    𪣻
 墊    垫
 墜    坠
+墠    𫮃
 墮    堕
 墰    坛
 墲    𪢸
 妝    妆
 姍    姗
 姦    奸
+娙    𫰛
 娛    娱
 婁    娄
 婡    𫝫
 嵐    岚
 嵗    岁
 嵼    𡶴
+嵽    𫶇
 嵾    㟥
 嶁    嵝
 嶄    崭
 廕    荫
 廚    厨
 廝    厮
+廞    𫷷
 廟    庙
 廠    厂
 廡    庑
 張    张
 強    强
 彃    𪪼
+彄    𫸩
 彆    别
 彈    弹
 彌    弥
 昇    升
 時    时
 晉    晋
+晛    𬀪
 晝    昼
 暈    晕
 暉    晖
+暐    𬀩
 暘    旸
 暢    畅
 暫    暂
 梔    栀
 梖    𪱷
 梘    枧
+梜    𬂩
 條    条
 梟    枭
 梲    棁
 檻    槛
 櫃    柜
 櫅    𪲎
+櫍    𬃊
 櫓    橹
 櫚    榈
 櫛    栉
 洩    泄
 洶    汹
 浹    浃
+浿    𬇙
 涇    泾
 涗    涚
 涼    凉
 滿    满
 漁    渔
 漊    溇
+漍    𬇹
 漚    沤
 漢    汉
 漣    涟
 澤    泽
 澦    滪
 澩    泶
+澫    𬇕
 澬    𫞚
 澮    浍
 澱    淀
 熗    炝
 熚    𤇹
 熡    𤋏
+熰    𬉼
 熱    热
 熲    颎
 熾    炽
+燀    𬊤
 燁    烨
 燈    灯
 燉    炖
 燒    烧
+燖    𬊈
 燙    烫
 燜    焖
 營    营
 瑽    𪻐
 璉    琏
 璊    𫞩
+璕    𬍤
+璗    𬍡
 璝    𪻺
 璡    琎
 璣    玑
 璾    𫞦
 璿    璇
 瓄    𪻨
+瓅    𬍛
 瓊    琼
 瓏    珑
 瓔    璎
 礄    硚
 礆    硷
 礎    础
+礐    𬒈
 礒    𥐟
 礙    碍
 礦    矿
 篔    筼
 篘    𥬠
 篠    筿
+篢    𬕂
 篤    笃
 篩    筛
 篳    筚
 糾    纠
 紀    纪
 紂    纣
+紃    𬘓
 約    约
 紅    红
 紆    纡
 紛    纷
 紜    纭
 紝    纴
+紞    𬘘
 紟    𫄛
 紡    纺
 紬    䌷
 給    给
 絧    𫄡
 絨    绒
+絪    𬘡
 絰    绖
 統    统
 絲    丝
 綀    𦈌
 綁    绑
 綃    绡
+綄    𬘫
 綆    绠
 綇    𦈋
 綈    绨
 綉    绣
 綋    𫟄
 綌    绤
+綎    𬘩
 綏    绥
 綐    䌼
 綑    捆
 經    经
 綖    𫄧
 綜    综
+綝    𬘭
 綞    缍
 綟    𫄫
 綠    绿
 綡    𫟅
 綢    绸
 綣    绻
+綧    𬘯
+綪    𬘬
 綫    线
 綬    绶
 維    维
 縬    𦈚
 縭    缡
 縮    缩
+縯    𬙂
 縰    𫄳
 縱    纵
 縲    缧
 繾    缱
 繿    䍀
 纁    𫄸
+纆    𬙊
 纇    颣
 纈    缬
 纊    纩
 纏    缠
 纓    缨
 纔    才
+纕    𬙋
 纖    纤
 纗    𫄹
 纘    缵
 蓯    苁
 蓴    莼
 蓽    荜
+蔄    𬜬
 蔔    卜
 蔘    参
 蔞    蒌
 蘆    芦
 蘇    苏
 蘊    蕴
-蘋    苹 
+蘋    苹 𬞟
 蘚    藓
 蘞    蔹
 蘟    𦻕
 蘺    蓠
 蘿    萝
 虆    蔂
+虉    𬟁
 處    处
 虛    虚
 虜    虏
 蛺    蛱
 蛻    蜕
 蜆    蚬
+蝀    𬟽
 蝕    蚀
 蝟    猬
 蝦    虾
 訊    讯
 訌    讧
 討    讨
+訏    𬣙
 訐    讦
 訑    𫍙
 訒    讱
 詗    诇
 詘    诎
 詛    诅
+詝    𬣞
 詞    词
 詠    咏
 詡    诩
 詣    诣
 試    试
 詩    诗
+詪    𬣳
 詫    诧
 詬    诟
 詭    诡
 諏    诹
 諑    诼
 諒    谅
+諓    𬣡
 論    论
 諗    谂
 諛    谀
 諜    谍
 諝    谞
 諞    谝
+諟    𬤊
 諡    谥
 諢    诨
 諣    𫍩
 諯    𫍱
 諰    𫍰
 諱    讳
+諲    𬤇
 諳    谙
 諴    𫍯
 諶    谌
 譎    谲
 譏    讥
 譑    𫍤
+譓    𬤝
 譖    谮
 識    识
 譙    谯
 軗    𨐅
 軛    轭
 軜    𫐇
+軝    𬨂
 軟    软
 軤    轷
 軨    𫐉
 輮    𫐓
 輯    辑
 輳    辏
+輶    𬨎
 輷    𫐒
 輸    输
 輻    辐
 鄖    郧
 鄟    𫑘
 鄧    邓
+鄩    𬩽
 鄭    郑
 鄰    邻
 鄲    郸
 醫    医
 醬    酱
 醱    酦
+醲    𬪩
 醶    𫑷
 釀    酿
 釁    衅
 釩    钒
 釲    𫟳
 釳    𨰿
+釴    𬬩
 釵    钗
 釷    钍
 釹    钕
 釺    钎
 釾    䥺
+釿    𬬱
 鈀    钯
 鈁    钫
 鈃    钘
 鉆    钻
 鉈    铊
 鉉    铉
+鉊    𬬿
 鉋    铇
 鉍    铋
 鉑    铂
 鉠    𫓭
 鉢    钵
 鉤    钩
+鉥    𬬸
 鉦    钲
+鉧    𬭁
 鉬    钼
 鉭    钽
+鉮    𬬹
 鉳    锫
 鉶    铏
 鉷    𫟹
 鋉    𨱈
 鋌    铤
 鋏    铗
+鋐    𬭎
 鋒    锋
 鋗    𫓶
 鋙    铻
 鋱    铽
 鋶    锍
 鋸    锯
+鋹    𬬮
 鋼    钢
 錀    𬬭
 錁    锞
 錛    锛
 錜    𫓻
 錝    𫓽
+錞    𬭚
 錟    锬
 錠    锭
 錡    锜
 鍥    锲
 鍩    锘
 鍬    锹
+鍭    𬭤
 鍮    𨱎
 鍰    锾
 鍵    键
 鎊    镑
 鎌    镰
 鎍    𫔅
+鎓    𬭩
 鎔    镕
 鎖    锁
 鎘    镉
 鏉    𨱒
 鏌    镆
 鏍    镙
+鏏    𬭬
 鏐    镠
 鏑    镝
 鏗    铿
 鏷    镤
 鏹    镪
 鏺    䥽
+鏻    𬭸
 鏽    锈
 鏾    𫔌
 鐃    铙
 鐦    锎
 鐧    锏
 鐨    镄
+鐩    𬭼
 鐪    𫓺
 鐫    镌
 鐮    镰
 闆    板
 闇    暗
 闈    闱
+闉    𬮱
 闊    阔
 闋    阕
 闌    阑
 隉    陧
 隊    队
 階    阶
+隑    𬮿
 隕    陨
 際    际
+隤    𬯎
 隨    随
 險    险
+隮    𬯀
 隯    陦
 隱    隐
 隴    陇
 頑    顽
 頒    颁
 頓    顿
+頔    𬱖
 頗    颇
 領    领
 頜    颌
+頠    𬱟
 頡    颉
 頤    颐
 頦    颏
 馼    𫘜
 駁    驳
 駃    𫘝
+駉    𬳶
 駊    𫘟
 駎    𩧨
 駐    驻
 駑    驽
 駒    驹
+駓    𬳵
 駔    驵
 駕    驾
 駘    骀
 駤    𫘠
 駧    𩧲
 駩    𩧴
+駪    𬳽
 駫    𫘡
 駭    骇
 駰    骃
 駶    𩧺
 駸    骎
 駻    𫘣
+駼    𬳿
 駿    骏
 騁    骋
 騂    骍
 騍    骒
 騎    骑
 騏    骐
+騑    𬴂
 騔    𩨀
 騖    骛
 騙    骗
 騚    𩨊
 騜    𫘩
 騝    𩨃
+騞    𬴃
 騟    𩨈
 騠    𫘨
 騤    骙
 驋    𩧯
 驌    骕
 驍    骁
+驎    𬴊
 驏    骣
 驓    𫘯
 驕    骄
 魷    鱿
 魺    鲄
 魽    𫠐
+鮀    𬶍
 鮁    鲅
 鮃    鲆
 鮄    𫚒
 鮅    𫚑
 鮆    𫚖
+鮈    𬶋
 鮊    鲌
 鮋    鲉
 鮍    鲏
 鮝    鲞
 鮞    鲕
 鮟    𩽾
+鮠    𬶏
+鮡    𬶐
 鮣    䲟
 鮤    𫚓
 鮦    鲖
 鯴    鲺
 鯶    𩽼
 鯷    鳀
+鯻    𬶟
 鯽    鲫
 鯾    𫚣
 鯿    鳊
 鰆    䲠
 鰈    鲽
 鰉    鳇
+鰊    𬶠
 鰋    𫚢
 鰌    䲡
 鰍    鳅
 鰲    鳌
 鰳    鳓
 鰵    鳘
+鰶    𬶭
 鰷    鲦
 鰹    鲣
 鰺    鲹
 鰼    鳛
 鰽    𫚧
 鰾    鳔
+鱀    𬶨
 鱂    鳉
 鱄    𫚋
 鱅    鳙
 鱖    鳜
 鱗    鳞
 鱘    鲟
+鱚    𬶮
 鱝    鲼
 鱟    鲎
 鱠    鲙
 鵂    鸺
 鵃    鸼
 鵊    𫛥
+鵏    𬷕
 鵐    鹀
 鵑    鹃
 鵒    鹆
 鶗    𫛸
 鶘    鹕
 鶚    鹗
+鶠    𬸘
 鶡    鹖
 鶥    鹛
 鶦    𫛷
 鶭    𫛯
 鶯    莺
 鶰    𫛫
+鶱    𬸣
 鶲    鹟
 鶴    鹤
 鶹    鹠
 鷗    鸥
 鷙    鸷
 鷚    鹨
+鷟    𬸦
 鷣    𫜃
 鷤    𫛴
 鷥    鸶
 鷨    𪉊
 鷩    𫜁
 鷫    鹔
+鷭    𬸪
 鷯    鹩
 鷲    鹫
 鷳    鹇
 鸋    𫛢
 鸌    鹱
 鸏    鹲
+鸑    𬸚
 鸕    鸬
 鸗    𫛟
 鸘    鹴
 齔    龀
 齕    龁
 齗    龂
+齘    𬹼
 齙    龅
 齜    龇
 齟    龃
 齪    龊
 齬    龉
 齭    𫜭
+齮    𬺈
 齯    𫠜
 齰    𫜬
 齲    龋
 齴    𫜮
 齶    腭
 齷    龌
+齼    𬺓
 齾    𫜰
 龍    龙
 龎    厐
 𡄣   𠵸
 𡅏   𠲥
 𡅯   𪢖
+𡑍   𫭼
 𡑭   𡋗
 𡓁   𪤄
 𡓾   𡋀
 𥖅   𥐯
 𥖲   𪿞
 𥗇   𪿵
+𥗽   𬒗
 𥜐   𫀓
 𥜰   𫀌
 𥞵   𥞦
index dee97540c2170d612e2bc8c07417cc2387eea50b..06e6596422b35c0ca97eb2919162040e74e66b2c 100644 (file)
@@ -29,6 +29,7 @@
 乾隆 乾隆
 乾隆年間   乾隆年间
 乾隆皇帝   乾隆皇帝
+二噁英      二𫫇英
 以免藉口   以免借口
 以功覆過   以功复过
 侔德覆載   侔德复载
 申覆 申复
 畢昇 毕昇
 發覆 发复
-盼既示覆   盼既示复
 瞭如 了如
 瞭如指掌   了如指掌
 瞭望 瞭望
index d8692ecf189fbaef98be4d6c241df68f8692e8ae..8960ce8d248bad7a29fad66afd0515937dfcf810 100644 (file)
@@ -230,9 +230,8 @@ U盤        隨身碟
 登錄 登入
 發佈 釋出
 發送 傳送
-皮膚 面板
 盤片 碟片
\9b¤ç¬¦ ç¢\9f符
\9b¤ç¬¦ ç£\81ç¢\9fæ©\9f代è\99\9f
 目標代碼   目的碼
 相冊 相簿
 矢量 向量
@@ -294,6 +293,7 @@ U盤        隨身碟
 藍牙 藍芽
 虛函數      虛擬函式
 虛擬機      虛擬機器
+虛擬機器   虛擬機器
 表達式      表示式 運算式
 複印 影印
 複選按鈕   覈取按鈕
index 265bf1ad8755d25fef398a7f46fddbdb1ac88b10..22b3b899d899210a08612065e09ddd022e2bc567 100644 (file)
@@ -34,3 +34,4 @@
 鐦    鉲
 鑥    鎦
 黃宏 黃宏
+借記卡      簽帳金融卡
index 9ac401fdbb8ba4ce0dffb608fab3fc317e4d7a28..7ab04dfdebb676cb2cb30641d1103d15c2cbf012 100644 (file)
@@ -10,3 +10,5 @@
 衹    衹 只
 著    着 著
 沈    沈 沉
+噁    恶 𫫇        「𫫇」爲化學名詞用字,如「二𫫇英」。        可恶 恶心 二𫫇英
+蘋    苹 𬞟        「𬞟」爲一種蕨類植物,生於淺水,四片小葉似「田」字,亦稱「田字草」,音pin2,粵音pan4。蘋果之「苹」音ping2,粵音ping4。
index f64533698b04ae5a95fad97773dcf08d3b867fac..d629b3fed5b736a83b0ef4bee91d3fef5165c7fc 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "opencc",
-  "version": "1.1.3",
+  "version": "1.1.4",
   "description": "Conversion between Traditional and Simplified Chinese",
   "author": "Carbo Kuo <byvoid@byvoid.com>",
   "license": "Apache-2.0",
index c74f8d0d9c29d984886112f479455f4adbec0390..474800180af8ae0a44ab5e687b62b58f83d8bdec 100644 (file)
@@ -25,7 +25,7 @@ bash ${MINICONDA_FILENAME} -b -f -p $HOME/miniconda3
 export PATH=$HOME/miniconda3/bin:$PATH
 eval "$(conda shell.bash hook)"
 
-for VERSION in 2.7 3.5 3.6 3.7 3.8 3.9; do
+for VERSION in 3.7 3.8 3.9 3.10; do
     # Create and activate environment
     conda create -y -n py$VERSION python=$VERSION
     conda activate py$VERSION
index e8d958f7d419619f77a4c1597edede44974f35ff..2862fbf4bb6717a0ceed68603d7ee3e89e846359 100644 (file)
@@ -12,7 +12,7 @@ bash ${MINICONDA_FILENAME} -b -f -p $HOME/miniconda3
 export PATH=$HOME/miniconda3/bin:$PATH
 eval "$(conda shell.bash hook)"
 
-for VERSION in 2.7 3.5 3.6 3.7 3.8 3.9; do
+for VERSION in 3.7 3.8 3.9 3.10; do
     # Create and activate environment
     conda create -y -n py$VERSION python=$VERSION
     conda activate py$VERSION
index 5bcbc2b8c23e0e470af08bc440856064d68b5289..58dc2122f47b3e0455bbdeb8b40ca6a251167224 100644 (file)
@@ -1,7 +1,7 @@
 @echo off
 setlocal EnableDelayedExpansion
 
-SET VERSIONS=2.7 3.5 3.6 3.7 3.8 3.9
+SET VERSIONS=3.7 3.8 3.9 3.10
 SET SOURCEDIR=%cd%
 
 REM Build packages
index af52ba6ca7371b5fc2bb6623a221128791ebcfbc..ed06259cd3bf560b084cfa675fb47d846ba583c6 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -202,7 +202,6 @@ setuptools.setup(
         'Natural Language :: Chinese (Simplified)',
         'Natural Language :: Chinese (Traditional)',
         'Programming Language :: Python',
-        'Programming Language :: Python :: 2',
         'Programming Language :: Python :: 3',
         'License :: OSI Approved :: Apache Software License',
         'Topic :: Scientific/Engineering',
index 07cf324a8368f374007321713b862db0f312fc4d..40e46d1f0888f2040b9543b49d72aa44cca9b642 100644 (file)
@@ -58,10 +58,10 @@ SerializableDictPtr ConvertDict(const std::string& format, const DictPtr dict) {
 }
 
 namespace opencc {
-void ConvertDictionary(const std::string inputFileName,
-                       const std::string outputFileName,
-                       const std::string formatFrom,
-                       const std::string formatTo) {
+void ConvertDictionary(const std::string& inputFileName,
+                       const std::string& outputFileName,
+                       const std::string& formatFrom,
+                       const std::string& formatTo) {
   DictPtr dictFrom = LoadDictionary(formatFrom, inputFileName);
   SerializableDictPtr dictTo = ConvertDict(formatTo, dictFrom);
   dictTo->SerializeToFile(outputFileName);
index 4bc4e8a2155fadfd7f0f81899323a44a14068aa9..f911c4feb57affd8106309249a03031f3192ad96 100644 (file)
@@ -25,8 +25,8 @@ namespace opencc {
  * Converts a dictionary from a format to another.
  * @ingroup opencc_cpp_api
  */
-OPENCC_EXPORT void ConvertDictionary(const std::string inputFileName,
-                                     const std::string outputFileName,
-                                     const std::string formatFrom,
-                                     const std::string formatTo);
+OPENCC_EXPORT void ConvertDictionary(const std::string& inputFileName,
+                                     const std::string& outputFileName,
+                                     const std::string& formatFrom,
+                                     const std::string& formatTo);
 } // namespace opencc
index a3612455538928ec5cae04950f505194c910cd25..f5e5140148316a2133d38dc1da437bb545895ae7 100644 (file)
@@ -30,9 +30,12 @@ bool Lexicon::IsSorted() {
                         DictEntry::UPtrLessThan);
 }
 
-bool Lexicon::IsUnique() {
+bool Lexicon::IsUnique(std::string* dupkey) {
   for (size_t i = 1; i < entries.size(); ++i) {
     if (entries[i - 1]->Key() == entries[i]->Key()) {
+      if (dupkey) {
+        *dupkey = entries[i]->Key();
+      }
       return false;
     }
   }
index bb8724c4ad768493365ff01a0bb35ec8c5824e10..688912875ead153c5984cbea80a5efa9cc3b8ad7 100644 (file)
@@ -47,7 +47,8 @@ public:
   bool IsSorted();
 
   // Returns true if every key unique (after sorted).
-  bool IsUnique();
+  // When dupkey is set, it is set to the duplicate key.
+  bool IsUnique(std::string* dupkey = nullptr);
 
   const DictEntry* At(size_t index) const { return entries.at(index).get(); }
 
index d256850e352b912423a1781c9dafb7be8d75dcf8..c81b3119981fe44e5a82deb4a8465807c6a3ed50 100644 (file)
@@ -35,6 +35,9 @@ static size_t GetKeyMaxLength(const LexiconPtr& lexicon) {
 
 static DictEntry* ParseKeyValues(const char* buff, size_t lineNum) {
   size_t length;
+  if (buff == nullptr || UTF8Util::IsLineEndingOrFileEnding(*buff)) {
+    return nullptr;
+  }
   const char* pbuff = UTF8Util::FindNextInline(buff, '\t');
   if (UTF8Util::IsLineEndingOrFileEnding(*pbuff)) {
     throw InvalidTextDictionary("Tabular not found " + std::string(buff),
@@ -66,7 +69,10 @@ static LexiconPtr ParseLexiconFromFile(FILE* fp) {
   UTF8Util::SkipUtf8Bom(fp);
   size_t lineNum = 1;
   while (fgets(buff, ENTRY_BUFF_SIZE, fp)) {
-    lexicon->Add(ParseKeyValues(buff, lineNum));
+    DictEntry* entry = ParseKeyValues(buff, lineNum);
+    if (entry != nullptr) {
+      lexicon->Add(entry);
+    }
     lineNum++;
   }
   return lexicon;
@@ -88,8 +94,10 @@ TextDictPtr TextDict::NewFromSortedFile(FILE* fp) {
 TextDictPtr TextDict::NewFromFile(FILE* fp) {
   const LexiconPtr& lexicon = ParseLexiconFromFile(fp);
   lexicon->Sort();
-  if (!lexicon->IsUnique()) {
-    throw InvalidFormat("The text dictionary contains duplicated keys.");
+  std::string dupkey;
+  if (!lexicon->IsUnique(&dupkey)) {
+    throw InvalidFormat(
+        "The text dictionary contains duplicated keys: " + dupkey + ".");
   }
   return TextDictPtr(new TextDict(lexicon));
 }
index e0dff7943435939bb500fc2cf8bec7f21eb793cb..7a8db0f9067e17e24b7d1c36dac1c9a8a127efbb 100644 (file)
@@ -40,6 +40,18 @@ TEST_F(TextDictTest, Deserialization) {
   TestDict(deserialized);
 }
 
+TEST_F(TextDictTest, DeserializationEmptyLine) {
+  FILE* fp = fopen(fileName.c_str(), "w");
+  fprintf(fp, "A\tB\n\n\nC\tD E\n\n");
+  fclose(fp);
+  const TextDictPtr& dict = SerializableDict::NewFromFile<TextDict>(fileName);
+  EXPECT_EQ(dict->GetLexicon()->Length(), 2);
+
+  Optional<const DictEntry*> entry = dict->opencc::Dict::Match("A");
+  EXPECT_TRUE(!entry.IsNull());
+  EXPECT_EQ(utf8("A"), entry.Get()->Key());
+}
+
 TEST_F(TextDictTest, ExactMatch) {
   auto there = textDict->Match("積羽沉舟", 12);
   EXPECT_FALSE(there.IsNull());
index f1b4b144d62662300c509f9f069520d89c2d581d..a04a6fccfe87d4aa67c2e79646c549b09e9b4be5 100644 (file)
@@ -152,7 +152,7 @@ public:
   }
 
   /**
-   * Copies a substd::string with given length to a new std::string.
+   * Copies a substring with given length to a new string.
    */
   static std::string FromSubstr(const char* str, size_t length) {
     std::string newStr;
index 757df619e02c6039d9582d6143c15054276fa6ca..b402a98e4ef6d9d662a2538333b7e237279d0866 100644 (file)
@@ -6,4 +6,5 @@
 曾經有一份真誠的愛情放在我面前,我沒有珍惜,等我失去的時候我才後悔莫及。人事間最痛苦的事莫過於此。如果上天能夠給我一個再來一次得機會,我會對那個女孩子說三個字,我愛你。如果非要在這份愛上加個期限,我希望是,一萬年。
 新的理論被發現了。
 金胄不是金色的甲冑。
-經理發現後勸諭兩人
\ No newline at end of file
+經理發現後勸諭兩人
+想到自己一緊張就口吃,我就沒胃口喫飯
\ No newline at end of file
index ce309ae27f1dce35e4bd6e934162d6ee9c78e49c..b1db0273127b46a4ea3c161ed7ab077de1c0511a 100644 (file)
@@ -6,4 +6,5 @@
 曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及。人事间最痛苦的事莫过于此。如果上天能够给我一个再来一次得机会,我会对那个女孩子说三个字,我爱你。如果非要在这份爱上加个期限,我希望是,一万年。
 新的理论被发现了。
 金胄不是金色的甲胄。
-经理发现后劝谕两人
\ No newline at end of file
+经理发现后劝谕两人
+想到自己一紧张就口吃,我就没胃口吃饭
\ No newline at end of file
index 51850494358b192597d6f00621ab7857b7dfb907..299716adf8b993229ed29ab00dee31cb63d96b51 100644 (file)
@@ -1 +1,2 @@
-曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及。人事间最痛苦的事莫过于此。如果上天能够给我一个再来一次得机会,我会对那个女孩子说三个字,我爱你。如果非要在这份爱上加个期限,我希望是,一万年。
\ No newline at end of file
+曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及。人事间最痛苦的事莫过于此。如果上天能够给我一个再来一次得机会,我会对那个女孩子说三个字,我爱你。如果非要在这份爱上加个期限,我希望是,一万年。
+二𫫇英
\ No newline at end of file
index 86de44a22031eaa56dd8e1464b7c211ac86c1bad..eef2f346e9be0eaadd5c779897de7a850248070f 100644 (file)
@@ -1 +1,2 @@
-曾經有一份真誠的愛情放在我面前,我沒有珍惜,等我失去的時候我才後悔莫及。人事間最痛苦的事莫過於此。如果上天能夠給我一個再來一次得機會,我會對那個女孩子說三個字,我愛你。如果非要在這份愛上加個期限,我希望是,一萬年。
\ No newline at end of file
+曾經有一份真誠的愛情放在我面前,我沒有珍惜,等我失去的時候我才後悔莫及。人事間最痛苦的事莫過於此。如果上天能夠給我一個再來一次得機會,我會對那個女孩子說三個字,我愛你。如果非要在這份愛上加個期限,我希望是,一萬年。
+二噁英
\ No newline at end of file